package edu.nf.supermarket.service;

import com.github.pagehelper.PageInfo;
import edu.nf.supermarket.entity.Commodity;
import edu.nf.supermarket.entity.Orders;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * @author yjj
 * @date 2025-05-21
 */
public interface OrderService {
    /**
     * 添加订单
     * @param userId
     * @param
     */
    void addOrder(Integer userId,Orders orders, Integer commodityId, Integer commodityNum);
    /**
     * 查询所有订单
     * @return
     */
    List<Orders> findAllOrder();
    /**
     * 根据用户id查询订单
     * @param userId
     * @return
     */
    PageInfo<Orders> findOrderByUserId(Integer userId, Byte status, Integer pageNum, Integer pageSize);
    /**
     * 修改订单状态
     * @param orderId
     * @param status
     */
    void updateOrderStatus(String orderId,Byte status);

    /**
     * 查看订单详情
     * @param orderId
     * @return
     */
    Orders findOrderByOrderID(String orderId);
    /**
     * 查询用户购物车
     */
    Orders findCommodityByUserId(Integer userId);
    /**
     * 添加商品到购物车
     */
    void addCommodityToCart(String orderId,Integer commodityId, Integer commodityNum, String spec1, String spec2);
    /**
     * 修改商品数量
     */
    void updateCommodityNum(String orderId,Integer commodityId, Integer commodityNum);
    /**
     * 删除购物车中的商品
     */
    void deleteCommodityFromCart(String orderId,Integer commodityId);
    /**
     * 生成订单
     */
    void generateOrder(Integer userId, Orders orders, Map<Integer, Commodity>  commodity);
    /**
     * 查询购物车商品
     */
    Orders findCommodityByUserIdNoDelete(Integer userId);
    /**
     * 添加支付时间
     */
    void addPayTime(LocalDateTime payTime,String orderId);
    /**
     * 查询订单编号
     */
    String findOrderId(Integer userId);
    /**
     * 根据订单号或商品名模糊查询订单
     */
    List<Orders> searchOrdersByKeyword(String keyword,Integer userId);
    /**
     * 查询订单时间段
     */
    List<Orders> findOrdersByDateRange(LocalDate startTime, LocalDate endTime,  Integer userId);
    /**
     * 添加订单金额
     */
    void addOrderAmount(String orderId, BigDecimal orderMoney);
    /**
     * 计算总销售额
     */
    BigDecimal calculateSales();
    /**
     * 计算某个时间段内的销售额
     */
    BigDecimal calculateMonthSales(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 删除订单
     */
    void deleteOrder(String orderId);
    /**
     * 取消订单
     */
    void cancelOrder(String orderId);

}
